/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.gob.pnp.despachadores;

import java.sql.*;
import java.util.*;
import pe.gob.pnp.actions.*;
import pe.gob.pnp.factories.*;

/**
 *
 * @author Home
 */
public class RtsDespachador {

    public static List<RtsBean> obtenerRTSPersona(int expediente) throws SQLException {
        RtsBean rts = new RtsBean();
        List<RtsBean> lstRTS = new ArrayList<RtsBean>();
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "SELECT NRTPE_IDENTIFICADOR,NEXPE_IDENTIFICADOR,";
            sql += " NRTPE_TOTALRTS,CRTPE_OBSERVACIONES,DRTPE_FECHACREACION,";
            sql += " CRTPE_RESOLUCION,BRTPE_ELIMINADO,NRTPE_ANIOS,NRTPE_MESES,NRTPE_DIAS,NRTPE_PARRAFO ";
            sql += " FROM PERMA_RTSPERSONAL  WHERE NEXPE_IDENTIFICADOR = ?";
            sql += " order by NRTPE_IDENTIFICADOR desc ";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, expediente);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                rts = new RtsBean();
                rts.setNrtpe_identificador(rs.getInt("NRTPE_IDENTIFICADOR"));
                rts.setNexpe_identificador(rs.getInt("NEXPE_IDENTIFICADOR"));
                rts.setNrtpe_totalrts(rs.getDouble("NRTPE_TOTALRTS"));
                rts.setCrtpe_observaciones(rs.getString("CRTPE_OBSERVACIONES"));
                rts.setDrtpe_fechacreacion(rs.getDate("DRTPE_FECHACREACION"));
                rts.setNrtpe_parrafo(rs.getString("NRTPE_PARRAFO"));
                rts.setCrtpe_resolucion(rs.getString("CRTPE_RESOLUCION"));
                rts.setNrtpe_anios(rs.getInt("NRTPE_ANIOS"));
                rts.setNrtpe_meses(rs.getInt("NRTPE_MESES"));
                rts.setNrtpe_dias(rs.getInt("NRTPE_DIAS"));
                rts.setBrtpe_eliminado(rs.getInt("brtpe_eliminado"));
                lstRTS.add(rts);
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return lstRTS;
    }

    public static RtsBean obtenerRTSId(int id_rts) throws SQLException {
        RtsBean rts = new RtsBean();
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "SELECT e.cexpe_codigoarchivo ,R.NRTPE_IDENTIFICADOR, R.NEXPE_IDENTIFICADOR, E.NPEPO_IDENTIFICADOR,";
            sql += " R.NRTPE_TOTALRTS,R.CRTPE_OBSERVACIONES, R.DRTPE_FECHACREACION,";
            sql += " R.CRTPE_RESOLUCION,R.BRTPE_ELIMINADO,R.NRTPE_ANIOS,R.NRTPE_MESES,R.NRTPE_DIAS, ";
            sql += " R.Nrtpe_parrafo, r.nrtpe_usuariocreacion ";
            sql += " FROM PERMA_RTSPERSONAL R ";
            sql += " INNER JOIN SISMA_EXPEDIENTE E ON E.NEXPE_IDENTIFICADOR=R.NEXPE_IDENTIFICADOR ";
            sql += " INNER JOIN PERMA_PERSONALPOLICIAL P ON E.NPEPO_IDENTIFICADOR=P.NPEPO_IDENTIFICADOR ";
            sql += "  WHERE R.NRTPE_IDENTIFICADOR = ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, id_rts);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                rts = new RtsBean();
                rts.setNrtpe_identificador(rs.getInt("NRTPE_IDENTIFICADOR"));
                rts.setNexpe_identificador(rs.getInt("NEXPE_IDENTIFICADOR"));
                rts.setNrtpe_totalrts(rs.getDouble("NRTPE_TOTALRTS"));
                rts.setCrtpe_observaciones(rs.getString("CRTPE_OBSERVACIONES"));
                rts.setDrtpe_fechacreacion(rs.getDate("DRTPE_FECHACREACION"));
                rts.setCrtpe_resolucion(rs.getString("CRTPE_RESOLUCION"));
                rts.setNrtpe_parrafo(rs.getString("Nrtpe_parrafo"));
                rts.setNrtpe_anios(rs.getInt("NRTPE_ANIOS"));
                rts.setNrtpe_meses(rs.getInt("NRTPE_MESES"));
                rts.setNrtpe_dias(rs.getInt("NRTPE_DIAS"));
                rts.setBrtpe_eliminado(rs.getInt("brtpe_eliminado"));
                rts.setNpepo_identificador(rs.getInt("NPEPO_IDENTIFICADOR"));
                rts.setCexpe_codigoarchivo(rs.getString("cexpe_codigoarchivo"));
                rts.setNrtpe_usuariocreacion(rs.getString("nrtpe_usuariocreacion"));
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return rts;
    }
    
     public static RtsBean obtenerRTSActivoPersona(int expediente) throws SQLException {
        RtsBean rts = null;
        Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "SELECT NRTPE_IDENTIFICADOR,NEXPE_IDENTIFICADOR,";
            sql += " NRTPE_TOTALRTS,CRTPE_OBSERVACIONES,DRTPE_FECHACREACION,";
            sql += " CRTPE_RESOLUCION,BRTPE_ELIMINADO,NRTPE_ANIOS,NRTPE_MESES,NRTPE_DIAS ";
            sql += " FROM PERMA_RTSPERSONAL  WHERE NEXPE_IDENTIFICADOR = ? and BRTPE_ELIMINADO=0";
            sql += " order by NRTPE_IDENTIFICADOR desc ";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, expediente);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                rts = new RtsBean();
                rts.setNrtpe_identificador(rs.getInt("NRTPE_IDENTIFICADOR"));
                rts.setNexpe_identificador(rs.getInt("NEXPE_IDENTIFICADOR"));
                rts.setNrtpe_totalrts(rs.getDouble("NRTPE_TOTALRTS"));
                rts.setCrtpe_observaciones(rs.getString("CRTPE_OBSERVACIONES"));
                rts.setDrtpe_fechacreacion(rs.getDate("DRTPE_FECHACREACION"));
                rts.setCrtpe_resolucion(rs.getString("CRTPE_RESOLUCION"));
                rts.setNrtpe_anios(rs.getInt("NRTPE_ANIOS"));
                rts.setNrtpe_meses(rs.getInt("NRTPE_MESES"));
                rts.setNrtpe_dias(rs.getInt("NRTPE_DIAS"));
                rts.setBrtpe_eliminado(rs.getInt("brtpe_eliminado"));
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return rts;
    }

    /**
     *
     * @param tipo Ascenso o Baja
     * @param id_rts
     * @param accion C = para calculo, L = listar todos
     * @return
     * @throws SQLException
     */
    public static List<AscensosPersonal> obtenerAscensosPersona(int tipo, Integer id_rts,String accion) throws SQLException {
        AscensosPersonal ascensos = new AscensosPersonal();
        List<AscensosPersonal> lstAscensos = new ArrayList<AscensosPersonal>();
        Connection conn = null;
        StringBuilder sql = new StringBuilder();
        try {
            conn = ConnectionPool.obtenerConexion();
            sql.append(" SELECT  HA.NHIAS_IDENTIFICADOR,HA.NHIAS_ANIO, ");
            sql.append(" HA.DHIAS_FECHAASCENSO, HA.NPEPO_IDENTIFICADOR, ");
            sql.append(" HA.NGRAD_IDENTIFICADOR, HA.CHIAS_RESOLUCION,");
            sql.append(" HA.NHIAS_ANIOS, HA.NHIAS_MESES,HA.NHIAS_DIAS,G.CGRAD_DESCRIPCION, ");
            sql.append(" HA.BHIAS_INCLUIDO, HA.DHIAS_FECHAINICIO,HA.NHIAS_TIPO,HA.CHIAS_MOTIVOBAJA ");
            sql.append(" FROM PERDE_HISTORIALASCENSOS HA ");
            sql.append(" INNER JOIN PERMA_PERSONALPOLICIAL P ON P.NPEPO_IDENTIFICADOR = HA.NPEPO_IDENTIFICADOR");
            sql.append(" LEFT OUTER JOIN SISMA_GRADO G ON G.NGRAD_IDENTIFICADOR = HA.NGRAD_IDENTIFICADOR");
            sql.append(" WHERE HA.NRTPE_IDENTIFICADOR =?");
            sql.append(" AND HA.BHIAS_ELIMINADO= 0");
            if(tipo == 1 ){sql.append(" AND HA.NHIAS_TIPO in (1,3)" );}
            if(tipo == 2 ){sql.append(" AND HA.NHIAS_TIPO = 2" );}
            if(accion.equals("C")){
                sql.append(" AND HA.BHIAS_INCLUIDO=1" );
            }
            sql.append(" ORDER BY HA.NHIAS_ANIO,HA.DHIAS_FECHAINICIO,HA.NHIAS_TIPO asc");           
            PreparedStatement ps = conn.prepareStatement(sql.toString());
            ps.setInt(1, id_rts);            
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                ascensos = new AscensosPersonal();
                ascensos.setNhias_identificador(rs.getInt("NHIAS_IDENTIFICADOR"));
                ascensos.setNhias_anio(rs.getString("NHIAS_ANIO"));
                ascensos.setDhias_fechaascenso(rs.getDate("DHIAS_FECHAASCENSO"));
                ascensos.setNpepo_identificador(rs.getInt("NPEPO_IDENTIFICADOR"));
                ascensos.setNgrad_identificador(rs.getInt("NGRAD_IDENTIFICADOR"));
                ascensos.setChias_resolucion(rs.getString("CHIAS_RESOLUCION"));
                ascensos.setNhias_anios(rs.getInt("NHIAS_ANIOS"));
                ascensos.setNhias_meses(rs.getInt("NHIAS_MESES"));
                ascensos.setNhias_dias(rs.getInt("NHIAS_DIAS"));
                ascensos.setCgrad_descripcion(rs.getString("CGRAD_DESCRIPCION"));
                ascensos.setBhias_inluido(rs.getInt("BHIAS_INCLUIDO"));
                ascensos.setChias_motivobaja(rs.getString("CHIAS_MOTIVOBAJA"));
                ascensos.setDhias_fechainicio(rs.getDate("DHIAS_FECHAINICIO"));
                ascensos.setNhias_tipo(rs.getInt("NHIAS_TIPO"));
                lstAscensos.add(ascensos);
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return lstAscensos;
    }

    public static List<ExpedienteBean> obtenerExpedientePersona(String expediente) throws SQLException {
        ExpedienteBean expedientebean = new ExpedienteBean();
        List<ExpedienteBean> lstExpedientes = new ArrayList<ExpedienteBean>();
        Connection conn = null;
        StringBuilder sql = new StringBuilder();
        try {
            conn = ConnectionPool.obtenerConexion();
            sql.append("SELECT EXPEDIENTE, NEXPE_IDENTIFICADOR,");
            sql.append(" NPEPO_IDENTIFICADOR,NPERS_IDENTIFICADOR,BPEPO_ELIMINADO,");
            sql.append(" CGRAD_DESCRIPCION, NGRAD_CODIGOSIGE , APENOM " );
            sql.append("  FROM V_CONEXPEDIENTECONEXPEDIENTE");
            sql.append(" WHERE EXPEDIENTE = LPAD(?,6,'0') ");
            PreparedStatement ps = conn.prepareStatement(sql.toString());
            ps.setString(1, expediente);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                expedientebean = new ExpedienteBean();
                expedientebean.setExpediente(rs.getString("EXPEDIENTE"));
                expedientebean.setNexpe_identificador(rs.getInt("NEXPE_IDENTIFICADOR"));
                expedientebean.setNpepo_identificador(rs.getInt("NPEPO_IDENTIFICADOR"));
                expedientebean.setNpers_identificador(rs.getInt("NPERS_IDENTIFICADOR"));
                expedientebean.setBpepo_eliminado(rs.getBoolean("BPEPO_ELIMINADO"));
                expedientebean.setApenom(rs.getString("APENOM"));
                expedientebean.setCgrad_descripcion(rs.getString("CGRAD_DESCRIPCION"));
                expedientebean.setNgrad_codigosige(rs.getInt("NGRAD_CODIGOSIGE"));
                lstExpedientes.add(expedientebean);
            }
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return lstExpedientes;
    }

    public static boolean insertarRTS(RtsBean rts) {
        Connection conn = null;
        boolean resultado = false;
        StringBuilder upd = new StringBuilder();
        StringBuilder sql = new StringBuilder();
        try {
            conn = ConnectionPool.obtenerConexion();

            upd.append(" UPDATE PERMA_RTSPERSONAL SET ");
            upd.append(" BRTPE_ELIMINADO = 1 ");
            upd.append(" WHERE NEXPE_IDENTIFICADOR=?");
            PreparedStatement ps = conn.prepareStatement(upd.toString());
            ps.setInt(1, rts.getNexpe_identificador());
            ps.executeUpdate();
            
            sql.append(" INSERT INTO PERMA_RTSPERSONAL(NRTPE_IDENTIFICADOR, ");
            sql.append(" NEXPE_IDENTIFICADOR, ");
            sql.append(" DRTPE_FECHACREACION, CRTPE_RESOLUCION, NRTPE_USUARIOCREACION) ");
            sql.append(" VALUES (SEQ_NRTSPERSONAL.NEXTVAL,?,SYSDATE,?,?)");
            ps = conn.prepareStatement(sql.toString());
            ps.setInt(1, rts.getNexpe_identificador());
            ps.setString(2, rts.getCrtpe_resolucion().toUpperCase());
            ps.setString(3, rts.getNrtpe_usuariocreacion());
            ps.executeUpdate();

            resultado = true;
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return resultado;
    }

    public static int getIdRTS(){
        Connection conn = null;
        int id = 0;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "SELECT SEQ_NRTSPERSONAL.CURRVAL as ID FROM dual";
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                id=rs.getInt("ID");
            }else{
                id=1;
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }finally {
            ConnectionPool.liberarConexion(conn);
        }
        return id;
    }

    public static boolean actualizarRTS(RtsBean rts) {
        Connection conn = null;
        boolean resultado = false;
        StringBuilder sql = new StringBuilder();
        try {
            conn = ConnectionPool.obtenerConexion();
            sql.append("UPDATE PERMA_RTSPERSONAL SET ");
            sql.append(" DRTPE_FECHACREACION=SYSDATE, ");
            sql.append(" CRTPE_RESOLUCION=?, ");
            sql.append(" NRTPE_ANIOS=?, ");
            sql.append(" NRTPE_MESES=?, ");
            sql.append(" NRTPE_DIAS=?, ");
            sql.append(" nrtpe_parrafo=? ");
            sql.append(" WHERE NRTPE_IDENTIFICADOR=?");
            PreparedStatement ps = conn.prepareStatement(sql.toString());
            ps.setString(1, rts.getCrtpe_resolucion().toUpperCase());
            ps.setInt(2, rts.getNrtpe_anios());
            ps.setInt(3, rts.getNrtpe_meses());
            ps.setInt(4, rts.getNrtpe_dias());
            ps.setString(5, rts.getNrtpe_parrafo());
            ps.setInt(6, rts.getNrtpe_identificador());
            ps.executeUpdate();
            resultado = true;
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return resultado;
    }

    public static boolean actualizarAscenso(AscensoBean ascensos) {
        Connection conn = null;
        boolean resultado = false;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "UPDATE  PERDE_HISTORIALASCENSOS ";
            sql += " SET CHIAS_MOTIVOBAJA=?, ";
            sql += " NHIAS_ANIOS=?, NHIAS_MESES=?, NHIAS_DIAS=?, CHIAS_RESOLUCION=?, " ;
            sql += " DHIAS_FECHAASCENSO=?, NGRAD_IDENTIFICADOR=? ,BHIAS_INCLUIDO=?,DHIAS_FECHAINICIO=?,NHIAS_TIPO=? ,NHIAS_ANIO=?";
            sql += " WHERE NHIAS_IDENTIFICADOR=? ";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1,ascensos.getChias_motivobaja());
            ps.setInt(2,ascensos.getNhias_anios());
            ps.setInt(3,ascensos.getNhias_meses());
            ps.setInt(4,ascensos.getNhias_dias());
            ps.setString(5,ascensos.getChias_resolucion());
            ps.setDate(6,ascensos.getDhias_fechaascenso());
            ps.setInt(7,ascensos.getNgrad_identificador());
            ps.setInt(8,ascensos.getBhias_inluido());
            ps.setDate(9,ascensos.getDhias_fechainicio());
            ps.setInt(10,ascensos.getNhias_tipo());
            ps.setString(11,ascensos.getNhias_anio());
            ps.setInt(12,ascensos.getNhias_identificador());
            ps.executeUpdate();
            resultado = true;
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return resultado;
    }

    public static boolean insertarAscenso(AscensoBean ascensos) {
        Connection conn = null;
        boolean resultado = false;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "INSERT INTO PERDE_HISTORIALASCENSOS (NHIAS_IDENTIFICADOR,";
            sql += " NGRAD_IDENTIFICADOR, CHIAS_MOTIVOBAJA, NHIAS_ANIOS, NHIAS_MESES, ";
            sql += " NHIAS_DIAS,CHIAS_RESOLUCION,DHIAS_FECHAASCENSO,BHIAS_ACTIVO,";
            sql += " BHIAS_ELIMINADO,NPEPO_IDENTIFICADOR,NHIAS_TIPO,NRTPE_IDENTIFICADOR,";
            sql += " BHIAS_INCLUIDO,DHIAS_FECHAINICIO,NHIAS_ANIO)";
            sql += " VALUES (SEQ_RTSACCESOS.NEXTVAL,?,?,?,?,?,?,?,1,0,?,?,?,?,?,?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1,ascensos.getNgrad_identificador());
            ps.setString(2,ascensos.getChias_motivobaja());
            ps.setInt(3,ascensos.getNhias_anios());
            ps.setInt(4,ascensos.getNhias_meses());
            ps.setInt(5,ascensos.getNhias_dias());
            ps.setString(6,ascensos.getChias_resolucion());
            ps.setDate(7,ascensos.getDhias_fechaascenso());
            ps.setInt(8,ascensos.getNpepo_identificador());
            ps.setInt(9,ascensos.getNhias_tipo());
            ps.setInt(10,ascensos.getNrtpe_identificador());
            ps.setInt(11,ascensos.getBhias_inluido());
            ps.setDate(12,ascensos.getDhias_fechainicio());
            ps.setString(13,ascensos.getNhias_anio());
            System.out.println("SQL = "  + sql);
            ps.executeUpdate();
            resultado = true;
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return resultado;
    }

    public static boolean eliminarAscenso(int ascenso) {
        Connection conn = null;
        boolean resultado = false;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "DELETE FROM PERDE_HISTORIALASCENSOS WHERE NHIAS_IDENTIFICADOR=?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setInt(1, ascenso);
            ps.executeUpdate();
            resultado = true;
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
        return resultado;
    }

    public static void insertaLogConsulta(String usuario) {
         Connection conn = null;
        try {
            conn = ConnectionPool.obtenerConexion();
            String sql = "INSERT INTO SEGMA_RTSCONSULTAS (NRTS_IDENTIFICADOR,";
            sql += " CRTS_USUARIO, DRTS_FECHACONSULTA)";
            sql += " VALUES (SEQ_RTSCONSULTA.NEXTVAL,?,sysdate)";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, usuario);
            System.out.println("SQL = "  + sql);
            ps.executeUpdate();
        } catch (Exception ex) {
            ex.printStackTrace();
        } finally {
            ConnectionPool.liberarConexion(conn);
        }
    }
}
